package com.eatme.core.sort;

public class SortingHelper {

    private SortingHelper() {

    }

    public static <E extends Comparable<E>> boolean isSorted(E[] arr) {
        for (int i=1;i<arr.length;i++)
            if (arr[i-1].compareTo(arr[i])>0)
                return false;
        return  true;
    }

    public static <E extends Comparable<E>> void sortTest(String sortName,E[] arr) {
        long startTime = System.nanoTime();
        if (sortName.equals("SelectionSort"))
            SelectionSort.sort(arr);
        else if(sortName.equals("InsertionSortV1"))
            InsertionSort.sortV1(arr);
        else if(sortName.equals("InsertionSortV2"))
            InsertionSort.sortV2(arr);
        else if(sortName.equals("InsertionSort"))
            InsertionSort.sort(arr);
        else  if (sortName.equals("MergeSort"))
            MergeSort.sort(arr);
        else if (sortName.equals("MergeSortV3"))
            MergeSort.sortV3(arr);
        else if (sortName.equals("MergeSortV2"))
            MergeSort.sortV2(arr);
        else if (sortName.equals("MergeSortV4"))
            MergeSort.sortV4(arr);
        else if (sortName.equals("MergeSortBU"))
            MergeSort.sortBU(arr);
        else if (sortName.equals("QuickSort"))
            QuickSortV1.sort(arr);
        else if (sortName.equals("QuickSortV2"))
            QuickSortV2.sort(arr);
        else if (sortName.equals("QuickSortV3"))
            QuickSortV3.sort(arr);
        else if (sortName.equals("QuickSortV4"))
            QuickSortV4.sort(arr);
        else if (sortName.equals("QuickSortV5"))
            QuickSortV5.sort(arr);
        else if (sortName.equals("HeapSort"))
            HeapSort.sort(arr);
        else if (sortName.equals("HeapSortV2"))
            HeapSortV2.sort(arr);
        else if (sortName.equals("BubbleSort"))
            BubbleSort.sort(arr);
        else if (sortName.equals("BubbleSortV2"))
            BubbleSortV2.sort(arr);
        else if (sortName.equals("BubbleSortV3"))
            BubbleSortV3.sort(arr);
        else if (sortName.equals("BubbleSortV4"))
            BubbleSortV4.sort(arr);
        else if (sortName.equals("ShellSortV1"))
            ShellSortV1.sort(arr);
        else if (sortName.equals("ShellSortV2"))
            ShellSortV2.sort(arr);
        else if (sortName.equals("ShellSortV3"))
            ShellSortV3.sort(arr);
        long endTime = System.nanoTime();
        double time = (endTime-startTime)/1000000000.0;
        if (!SortingHelper.isSorted(arr))
            throw new RuntimeException(sortName+" failed");
        System.out.println(String.format("%s , n = %d : %f s",sortName,arr.length,time));
    }
}
